// 用户模型
const { User, validateLogin } = require('../../../models/user');
// 店铺模型
const { Store } = require('../../../models/store');
// 统一数据返回类
const { DataReturn } = require('../../../common/returnclass');
// token 生成，验证
const { createToken } = require('../../../modules/token');

// 向微信服务器发起请求
const request = require("request");
// hash密码
// const bcrypt = require('bcrypt');
// 工具
const _ = require('lodash'); 

module.exports = async (req, res) => {
	// 用户名 密码
	let { username, password, mobile, code } = req.fields;
	console.log(req.fields)
	
	if (!code) {
		// 数据格式校验
		const { error } = validateLogin(req.fields);
		// 格式不符合要求
		if (error) return DataReturn.getData(res,400,[], error.message);
		// 查找用户
		let userinfo = await User.findOne({ username })
		console.log(userinfo);
		// 用户不存在响应
		if (!userinfo) return DataReturn.getData(res,400,[], '用户名不存在');
		// 如果用户存在 验证密码 返回布尔值
		// const validPassword = await bcrypt.compare(password,userinfo.password);
		// 判断是否是管理员账号
		// if (userinfo.role !== 'admin') return DataReturn.getData(res,400,[], '不是管理员账号，无法登录');
		const validPassword = password == userinfo.password;
		// 密码错误
		if (!validPassword) return DataReturn.getData(res,400,[], '密码错误');
		// userinfo.token = createToken({}, 3600); // 第二个参数为传入的过期时间
		// 微信注册用户登录
		if (userinfo.role === 'normal') {
			return DataReturn.getData(res,200, { data: _.pick(userinfo, ['_id','username', 'avatar', 'sex', 'mobile', 'openid', 'receiving_address','role', 'state']), token: createToken({}, 60*60*24)}, '登录成功')
		} else if (userinfo.role === 'admin') {
			DataReturn.getData(res,200,{ data: { userinfo: _.pick(userinfo, ['_id', 'username', 'role', 'state'])}, token: createToken({}, 3600) }, '登录成功')
		} else { //商家
			let business = await Store.findOne({store_belong:userinfo._id});
			DataReturn.getData(res,200,{ data: {userinfo:_.pick(userinfo, ['_id', 'username', 'role', 'state']), storeinfo: business} , token: createToken({}, 3600) }, '登录成功')
		}
		
		
		
	} else { // 微信用户登录
			let { username, avatar, sex } = req.fields;
			var AppID = 'wx65f80798236a0d31';
			var AppSecret = 'b1dbcccb646bdd790ce96c9c4e00d59e';
			request.get('https://api.weixin.qq.com/sns/jscode2session?appid=' + AppID + '&secret='+ AppSecret +'&js_code=' + code + '&grant_type=authorization_code'
			,async function(error, response, body){
				console.log('b', JSON.parse(body));
				let userinfo = await User.findOne({ openid:JSON.parse(body).openid });
				if (!userinfo) {
					// 创建分类对象
					userinfo = new User({
						username,
						password: '*****',
						avatar,
						sex,
						openid: JSON.parse(body).openid
					});
					// 保存分类
					await userinfo.save()
					return DataReturn.getData(res,200, { data: _.pick(userinfo, ['_id','username', 'avatar', 'sex', 'openid', 'receiving_address']), token: createToken({}, 60*60*24)}, '登录成功')
				} 

				DataReturn.getData(res,200, { data: _.pick(userinfo, ['_id','username', 'avatar', 'sex', 'mobile', 'openid', 'receiving_address']), token: createToken({}, 60*60*24)}, '登录成功')
			})
	 }
	
}